package com.basic.thread;

class Phone {

    static {
        System.out.println("static");
    }

    public synchronized void aa(){
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("aa");
    }

    public static synchronized void bb(){
        System.out.println("bb");
    }

    public void hello(){
        System.out.println("hello");
    }

}
public class SyncDemo {
    public static void main(String[] args) {
        Phone phone = new Phone();
        Phone phone1 = new Phone();

        new Thread(new Runnable() {
            @Override
            public void run() {
                phone1.aa();
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                phone1.bb();
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                phone.hello();
            }
        }).start();
    }
}
/**
 * 1.aa、bb、hello为普通方法
 * bb、hello、aa
 *
 * 2.aa普通同步方法、bb普通同步方法、hello为普通方法
 * hello、aa、bb
 *
 * 3.aa静态方法、bb普通同步方法、hello为普通方法
 * bb、hello、aa
 *
 * 4.aa静态方法、bb静态方法、hello为普通方法
 * bb、hello、aa
 *
 * 5.aa静态同步方法、bb静态同步方法、hello为普通方法
 * hello、aa、bb
 *
 * 6.两个phone对象，aa普通同步方法、bb静态方法、hello为普通方法
 * bb、hello、aa
 *
 * 7.两个phone对象，aa普通同步方法、bb静态同步方法、hello为普通方法
 * bb、hello、aa
 *
 * 8.若存在静态代码块，静态代码块最先执行
 */
